#include <iostream>
#include<cstring>
#include<stdio.h>
#include <iomanip>
using namespace std;

const int N=16,M=1<<N;
int n, k;
double p[N];

//用二进制位表示是否抽中
double f[M][81];

double dp(int state, int  coins, int  r)
{
    double v = f[state][coins];
    if (v >= 0){
        f[state][coins] =v;
         return v;
    }
       
    if (coins >= k * r){
        f[state][coins] =v;
        return v = 0; //已经可以兑换所有
    }
       
    v = 0;

    for (int i = 0; i < n; i++)
    {
        if (state >> i & 1)
        { //有下一张卡片
            v += p[i] * (dp(state, coins + 1, r) + 1);
        }
        else //没有下一张卡牌
        {
            v += p[i] * (dp(state | (1 << i), coins, r - 1) + 1);
        }
    }
    f[state][coins] =v;
    return v;
}

int main()
{
    scanf("%d %d",&n,&k);
    for (int i = 0; i < n; i++)
    {
        scanf("%lf",&p[i]);
    }
    memset(f, -1, sizeof(f));
    printf("%.10lf\n",dp(0,0,n));
    return 0;
}